package com.hanserwei;

import com.hanserwei.config.SpringApplicationConfig;
import com.hanserwei.entity.GirlFriend;
import com.hanserwei.entity.Human;
import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;

import java.lang.reflect.Method;

public class Application {
    public static void main(String[] args) {
        ApplicationContext applicationContext = new AnnotationConfigApplicationContext(SpringApplicationConfig.class);
        // 注意，这里只能通过Human.class获取，而无法通过Student.class，因为在Spirng容器中，
        // 因为使用JDK动态代理，Ioc容器中，存储的是一个类型为Human的代理对象
        Human student = applicationContext.getBean(Human.class);
        student.display();
        // 输出代理类的父类，以此判断是JDK还是CGLib
        System.out.println(student.getClass().getSuperclass());
        System.out.println("=================================");
        GirlFriend girlFriend = applicationContext.getBean(GirlFriend.class);
        girlFriend.display();
        System.out.println(girlFriend.getClass());
        System.out.println(girlFriend.getClass().getSuperclass());
        // 输出代理类的所有方法
        for (Method method : girlFriend.getClass().getDeclaredMethods()) {
            System.out.println(method.getName());
        }
    }
}
